package com.fanghuaiming.test.netty.c5.eventloop;

import io.netty.bootstrap.Bootstrap;
import io.netty.channel.Channel;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.handler.codec.string.StringEncoder;
import java.net.InetSocketAddress;
import lombok.extern.slf4j.Slf4j;

/****
 * @description:
 * @version:1.0.0
 * @author fanghuaiming
 * @data Created in 2021/9/26 下午9:03
 *
 */
@Slf4j
public class EventLoopClient {
  public static void main(String[] args) throws InterruptedException {
      //1.启动类
      Channel channel = new Bootstrap()
              //2.添加 EvenLoop
              .group(new NioEventLoopGroup())
              //3.选择客户端 channel 实现
              .channel(NioSocketChannel.class)
              //4.添加处理器
              .handler(new ChannelInitializer<NioSocketChannel>() {//只有在连接建立之后才会执行
                  //在连接建立后被调用
                  @Override
                  protected void initChannel(NioSocketChannel ch) throws Exception {
                      ch.pipeline().addLast(new StringEncoder());
                  }
              })
              //发送连接请求
              .connect(new InetSocketAddress("localhost", 8080))
              //阻塞方法,知道与服务器的连接建立
              .sync()
              //代表的是连接对象
              .channel();
      System.out.println(channel);
      //下面这一步的短点要保证是 Thread的,不然会阻塞其他线程的执行
      //从服务端的日志可以看到无论当前发送多少条数据服务端用的都是同一个EventLoopGroup中的某一个EventLoop
      System.out.println();
  }
}
